Skip to main content

JS 有哪几种数据类型

  • 共 8 种。

    其中 7 种原始类型:null、undefined、String、Number、Boolean、BigInt[bɪɡɪnt]、Symbol[ˈsɪmbl]

  • 1 种复合类型: Object。除了原始类型的剩下全是复合类型,比如原生对象、数组、函数、正则...

  • BigInt 和 Symbol 用的比较少,得了解下怎么用。

Symbol

表示独一无二的值,最大的用法是用来定义对象的唯一属性名

let sy = Symbol('KK')
console.log(sy) // Symbol(KK)
typeof sy // "symbol"

// 相同参数 Symbol() 返回的值不相等
let sy1 = Symbol('kk')
sy === sy1 // false

// 由于每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。
let syObject = {}
syObject[sy] = 'kk'
console.log(syObject) // {Symbol(KK): "kk"}

Symbol 提出是为了解决什么问题?

可以往全局变量冲突讲

BigInt

BigInt 是 ES2020 新增基本数据类型,BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示,但是数据必须添加后缀 n

const a = 2172141653n
const b = 15346349309n
// BigInt 可以保持精度
a * b // 33334444555566667777n
// 普通整数无法保持精度
Number(a) * Number(b) // 33334444555566670000

1234 // 普通整数
1234n // BigInt
// BigInt 的运算
1n + 2n // 3n

基本数据类型的值直接保存在栈中,而复杂数据类型的值保存在堆中,通过使用在栈中保存对应的指针来获取堆中的值。